//定义一个数值和字符串的联合类型
let arr: [string, number];
arr = ['hello', 10]; 
console.log(arr,"arr");

//定义一个类型断言
let someValue: any = "this is a string";
//尖括号 断言
let strLength: number = (<string>someValue).length;
console.log(strLength);
//as 类型断言
let strLengths: number = (someValue as string).length;
console.log(strLengths);

//定义一个 void 实现函数的无返回值
function warnUser(): void {
    console.log("Hello my friend");
}
//定义一个 never 的函数
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}
//在 ts 中定义一个类并实现继承
class Animal {
    move(distance: number = 100) {
        console.log(`Hello world ${distance}分.`);
    }
}

class Dog extends Animal {
    bark() {
        console.log('Hello world');
    }
}

const dog = new Dog();
dog.move(10);
dog.bark();

//•	2种方式定义一个数组（数组中的元素可以是任意类型）

let list: any[] = [1, "123", 3];
console.log(list);

let lists: [number|string|boolean,number|string|boolean,number|string|boolean] = [1, "123", true];
console.log(lists);

//定义一个求和函数;例Add(2,8,9,6,5,8,7),返回结果45

function Add(a: number=2, b: number=8,c: number=9,d: number=6,e: number=5,f: number=8,g: number=7,): number {
    return a + b+c+d+e+f+g;
}

console.log(Add());

//
function f() {
    let a:number = 10;
    return function g() {
        let b = a * 5;
        return b;
    }
}

let g = f();

console.log(g());

const data=[{
    id:1,
    geom_xy:"POINT(0 0)",
    geom_z:"0"
},{
    id:2,
    geom_xy:"LINESTRING(1 1,2 2,3 3,)",
    geom_z:"0,1,2,3"
},{
    id:3,
    geom_xy:"POINT(4 4,5 5,6 6,7 7, 8,8)",
    geom_z:"4,5,6,7,8"
},]

const obj={
    a:{
        c:{
            w:2,
            r:{
                q:4
            }
        },
        d:1,
        f:2,
        e:3
    },
    b:{
        h:4,
        i:{
            p:{
                q:5
            }
        }
    }
}